/**
 *@file carPlatePostProcess.h
 *@author lynxi
 *@version v1.0
 *@date 2023-03-07
 *@par Copyright:
 *© 2022 北京灵汐科技有限公司 版权所有。
 * 注意：以下内容均为北京灵汐科技有限公司原创，未经本公司允许，不得转载，否则将视为侵权；对于不遵守此声明或者其他违法使用以下内容者，本公司依法保留追究权。\n
 *© 2022 Lynxi Technologies Co., Ltd. All rights reserved.
 * NOTICE: All information contained here is, and remains the property of Lynxi.
 *This file can not be copied or distributed without the permission of Lynxi
 *Technologies Co., Ltd.
 *@brief 车牌检测后处理
 */

#ifndef __CAR_PLATE_POST_PROCESS_H_
#define __CAR_PLATE_POST_PROCESS_H_

#include "boxInfo.h"
#include <memory>
#include <string>
#include <vector>

#ifdef __cplusplus
extern "C" {
#endif

typedef struct {
  int imgW;      // 原始图像宽
  int imgH;      // 原始图像高
  int targetNum; // 目标信息数组(targetData)长度
  lynBoxesInfo *boxesInfo;
  void *output_tensor;
} PlateRecogPostProcessInfo_t;

// yolo后处理信息
typedef struct {
  // 模型输入图像高
  int height;
  // 模型输入图像宽
  int width;
  // 原始图像高
  int ori_height;
  // 原始图像宽
  int ori_width;
  // 置信度阈值
  float score_threshold;
  // nms阈值
  float nms_threshold;
  // 默认500
  int nms_top_k;
  // 默认1
  int is_pad_resize;
  // 模型推理数据
  void *output_tensor;
  // 后处理结果
  lynBoxesInfo *boxesInfo;
} YoloPostProcessInfo_t;

/**
 * @brief 模型推理结果转换成DetectionResult
 *
 * @param[in] cfg 模型配置
 * @param[in] post_info yolov后处理信息
 * @param[in] pFilter 过滤id序列
 * @param[in] filterNum 过滤id序列包含个数
 * @return 推理结果
 */
int carPlateDetectPostProcess(YoloPostProcessInfo_t *post_info,
                              int *pFilter = nullptr, int filterNum = 0);

int carPlateRecogPostProcess(PlateRecogPostProcessInfo_t *post_info);
#ifdef __cplusplus
}
#endif

#endif
